mcmc_target Derived Type

type, public :: mcmc_target

Defines a model of the target distribution(s).


Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: data_noise = 1.0d0

A parameter representing the noise in the data.

integer(kind=int32), public :: likelihood_parallel_threshold = 10000

Minimum observation count for a threaded likelihood reduction. Adjust for the workload; nested worker teams are not created.


Type-Bound Procedures

procedure, public :: add_parameter => mt_add_param

  • private subroutine mt_add_param(this, x)

    Adds a new model parameter.

    Arguments

    Type IntentOptional Attributes Name
    class(mcmc_target), intent(inout) :: this

    The mcmc_target object.

    class(distribution), intent(in) :: x

    The parameter to add.

procedure, public :: evaluate_log_variance_prior => mt_eval_log_var_prior

Prior density in log-variance coordinates, including the Jacobian.

  • private pure function mt_eval_log_var_prior(this, log_variance) result(rst)

    Log density of log variance, including the variance-transform Jacobian. The default variance-space prior is log-normal, so its transformed density is normal with mean zero and standard deviation data_noise. Override this binding when changing the variance prior used by the sampler.

    Arguments

    Type IntentOptional Attributes Name
    class(mcmc_target), intent(in) :: this

    Target with finite, positive data_noise.

    real(kind=real64), intent(in) :: log_variance

    Natural logarithm of the variance.

    Return Value real(kind=real64)

    Log transformed prior; invalid prior parameters or NaN input give NaN.

procedure, public :: evaluate_prior => mt_eval_prior

  • private function mt_eval_prior(this, x) result(rst)

    Evaluates the PDF's for each parameter and computes a probability.

    Arguments

    Type IntentOptional Attributes Name
    class(mcmc_target), intent(in) :: this

    The mcmc_target object.

    real(kind=real64), intent(in), dimension(:) :: x

    An N-element array containing the values at which to evaluate each of the N parameter PDF's.

    Return Value real(kind=real64)

    The resulting probability.

procedure, public :: evaluate_variance_prior => mt_eval_var_prior

  • private pure function mt_eval_var_prior(this, x) result(rst)

    Computes the log prior density with respect to variance, without its log-coordinate Jacobian. Sampling uses evaluate_log_variance_prior instead.

    Arguments

    Type IntentOptional Attributes Name
    class(mcmc_target), intent(in) :: this

    The mcmc_target object.

    real(kind=real64), intent(in) :: x

    The value at which to evaluate the variance prior distribution PDF.

    Return Value real(kind=real64)

    Log prior density; outside support gives -infinity, invalid inputs NaN.

procedure, public :: get_parameter => mt_get_param

  • private function mt_get_param(this, i) result(rst)

    Gets a pointer to the stored parameter.

    Arguments

    Type IntentOptional Attributes Name
    class(mcmc_target), intent(in) :: this

    The mcmc_target object.

    integer(kind=int32), intent(in) :: i

    The index of the parameter to retrieve. If outside the bounds of the collection of parameters a null pointer is returned.

    Return Value class(distribution), pointer

    A pointer to the requested parameter distribution.

procedure, public :: get_parameter_count => mt_get_param_count

  • private pure function mt_get_param_count(this) result(rst)

    Gets the number of model parameters.

    Arguments

    Type IntentOptional Attributes Name
    class(mcmc_target), intent(in) :: this

    The mcmc_target object.

    Return Value integer(kind=int32)

    The parameter count.

procedure, public :: likelihood => mt_likelihood

  • private function mt_likelihood(this, xdata, ydata, xc, var) result(rst)

    Computes the Gaussian log likelihood. Invalid variance gives NaN.

    Arguments

    Type IntentOptional Attributes Name
    class(mcmc_target), intent(inout) :: this

    The mcmc_target object.

    real(kind=real64), intent(in), dimension(:) :: xdata

    An M-element array containing the independent data points.

    real(kind=real64), intent(in), dimension(:) :: ydata

    An M-element array containing the dependent data points.

    real(kind=real64), intent(in), dimension(:) :: xc

    An N-element array containing the model parameters.

    real(kind=real64), intent(in) :: var

    Finite, strictly positive model variance; it is not silently clamped.

    Return Value real(kind=real64)

    Log likelihood, or NaN for invalid/nonfinite inputs.

procedure, public :: likelihood_log_variance => mt_log_likelihood

Gaussian log likelihood accepting log variance directly.

  • private function mt_log_likelihood(this, xdata, ydata, xc, log_variance) result(rst)

    Computes the Gaussian log likelihood without exponentiating the variance. Residual magnitudes are scaled in log space before their squared reduction. Override this binding for custom likelihoods used by the sampler; overriding only likelihood changes calls to that variance-space entry point, not sampling.

    Arguments

    Type IntentOptional Attributes Name
    class(mcmc_target), intent(inout) :: this

    Target; its model workspace is resized as necessary.

    real(kind=real64), intent(in), dimension(:) :: xdata

    M finite independent observations.

    real(kind=real64), intent(in), dimension(:) :: ydata

    M finite dependent observations.

    real(kind=real64), intent(in), dimension(:) :: xc

    Finite parameters, one per registered parameter distribution.

    real(kind=real64), intent(in) :: log_variance

    Finite natural logarithm of the model variance.

    Return Value real(kind=real64)

    Log likelihood; empty data give zero, invalid inputs/models give NaN, and an unrepresentably large residual penalty gives negative infinity.

procedure, public :: log_posterior => mt_log_posterior

Posterior density in parameter/log-variance coordinates.

  • private function mt_log_posterior(this, xdata, ydata, xc, log_variance) result(rst)

    Evaluates the posterior density with respect to parameters and log variance. Includes the variance-transform Jacobian through evaluate_log_variance_prior. Impossible parameter states are rejected before model evaluation.

    Arguments

    Type IntentOptional Attributes Name
    class(mcmc_target), intent(inout) :: this

    Target whose prior and log-likelihood bindings are evaluated.

    real(kind=real64), intent(in), dimension(:) :: xdata

    Independent observations.

    real(kind=real64), intent(in), dimension(:) :: ydata

    Dependent observations, the same size as xdata.

    real(kind=real64), intent(in), dimension(:) :: xc

    Model parameters, one per registered distribution.

    real(kind=real64), intent(in) :: log_variance

    Natural logarithm of the model variance.

    Return Value real(kind=real64)

    Log posterior; impossible states give -infinity, invalid inputs give NaN.

procedure(evaluate_model), public, deferred :: model

  • subroutine evaluate_model(this, xdata, xc, y) Prototype

    Evaluates the model at the supplied values.

    Arguments

    Type IntentOptional Attributes Name
    class(mcmc_target), intent(in) :: this

    The mcmc_target object.

    real(kind=real64), intent(in), dimension(:) :: xdata

    An M-element array containing the values at which to evaluate the model.

    real(kind=real64), intent(in), dimension(:) :: xc

    An N-element array containing the model parameters.

    real(kind=real64), intent(out), dimension(:) :: y

    An M-element array where the resulting model values wil be written.

procedure, public :: sample_variance_prior => mt_sample_var_prior

  • private function mt_sample_var_prior(this, vc, n) result(rst)

    Samples the variance prior distribution for the requested number of samples.

    Arguments

    Type IntentOptional Attributes Name
    class(mcmc_target), intent(inout) :: this

    The mcmc_target object.

    real(kind=real64), intent(in) :: vc

    The prior variance term.

    integer(kind=int32), intent(in) :: n

    The number of samples.

    Return Value real(kind=real64), allocatable, dimension(:)

    The requested samples.